﻿//-----------------------------------------------------------------------
// <copyright file="IUsageModel.cs" company="Redmist">
//     Copyright (c) Damien T Smith. All rights reserved.
// </copyright>
// <author>Damien Smith</author>
//-----------------------------------------------------------------------

namespace Redmist.UsageMonitor.Model
{
    using System;
    using Redmist.UsageMonitor.CustomControls;

    /// <summary>Provides an interface for a monthly usage model.</summary>
    public interface IUsageModel
    {
        /// <summary>Gets or sets the maximum value for peak remaining progress.</summary>
        int PeakRemainingProgressMaximum { get; set; }

        /// <summary>Gets or sets the remaining peak progress value.</summary>
        int PeakRemaining { get; set; }

        /// <summary>Gets or sets a Redmist.UsageMonitor.CustomControls.ProgressStatusColor representing the peak remaining status.</summary>
        ProgressStatusColor PeakRemainingColor { get; set; }

        /// <summary>Gets or sets the maximum value for off peak remaining progress.</summary>
        int OffPeakRemainingProgressMaximum { get; set; }

        /// <summary>Gets or sets the remaining off peak progress value.</summary>
        int OffPeakRemaining { get; set; }

        /// <summary>Gets or sets a Redmist.UsageMonitor.CustomControls.ProgressStatusColor representing the off peak remaining status.</summary>
        ProgressStatusColor OffPeakRemainingColor { get; set; }

        /// <summary>Gets or sets the maximum value of the total billing period time.</summary>
        int BillingSecondsMaximum { get; set; }

        /// <summary>Gets or sets the value of the seconds remaining billing period time.</summary>
        int BillingSecondsRemaining { get; set; }

        /// <summary>Gets or sets a System.String representing a formatted view of the remaining billing period time.</summary>
        string FormattedBillingDaysRemaining { get; set; }

        /// <summary>Gets or sets a System.String representing a formatted view of the next anniversary date.</summary>
        string FormattedNextAnniversaryToolTip { get; set; }

        /// <summary>Gets or sets a value representing a the total counted downloads.</summary>
        int TotalCountedDownloads { get; set; }

        /// <summary>Gets or sets a value representing a the total counted uploads.</summary>
        int TotalCountedUploads { get; set; }

        /// <summary>Gets or sets a value representing the amount of usage relative to the remaining billing period time.</summary>
        int UsageReserve { get; set; }

        /// <summary>Gets or sets a value representing the daily average quota for the billing period.</summary>
        int DailyAverageStart { get; set; }

        /// <summary>Gets or sets a value representing the daily average usage so far for the billing period.</summary>
        int DailyAverageSoFar { get; set; }

        /// <summary>Gets or sets a value representing the daily average quota remaining for the remainder of the billing period.</summary>
        int DailyAverageRemaining { get; set; }

        /// <summary>Gets or sets a System.String representing an ISP plan name.</summary>
        string PlanName { get; set; }

        /// <summary>Gets or sets a value representing the monthly quota.</summary>
        int Quota { get; set; }

        /// <summary>Gets or sets a System.DateTime representing the next billing anniversary.</summary>
        DateTime NextAnniversary { get; set; }

        /// <summary>Gets or sets a System.DateTime representing when the usage statistics were last updated.</summary>
        DateTime LastUpdated { get; set; }

        /// <summary>Gets or sets a System.String representing the rate at which excess usage is charged.</summary>
        string ExcessRate { get; set; }

        /// <summary>Gets or sets a System.String representing the excess charges for the current billing period.</summary>
        string ExcessCharges { get; set; }

        /// <summary>Gets or sets a System.String representing a detailed view of download statistics.</summary>
        string DownloadedToolTip { get; set; }

        /// <summary>Gets or sets a System.String representing a detailed view of upload statistics.</summary>
        string UploadedToolTip { get; set; }

        /// <summary>Gets or sets an array of integers representing the current primary download history data.</summary>
        int[] CurrentDownloadHistory { get; set; }

        /// <summary>Gets or sets an array of integers representing the current secondary download history data.</summary>
        int[] SecondaryDownloadHistory { get; set; }

        /// <summary>Gets or sets an array of integers representing the current primary upload history data.</summary>
        int[] CurrentUploadHistory { get; set; }

        /// <summary>Gets or sets an array of integers representing the current secondary upload history data.</summary>
        int[] SecondaryUploadHistory { get; set; }

        /// <summary>Gets or sets a value representing the maximum Y-value for the download history graph.</summary>
        int DownloadGraphMaximum { get; set; }

        /// <summary>Gets or sets a value representing the maximum Y-value for the upload history graph.</summary>
        int UploadGraphMaximum { get; set; }

        /// <summary>Gets or sets a System.DateTime representing the start date for the currently selected history view days.</summary>
        DateTime HistoryStartDate { get; set; }
    }
}
